//
//  OtherViewController1.swift
//  RXSwiftTest
//
//  Created by ZhangBo on 2019/4/21.
//  Copyright © 2019 ZhangBo. All rights reserved.
//

import UIKit
import RxCocoa
import RxSwift
import RxDataSources

class OtherViewController1: UIViewController {
    /// 定义释放类
    let disposedBag = DisposeBag()
    
    /// SectionModel<Sting,String>中string都可以修改为你自己定义的model类或者结构体
    let dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String,String>>(configureCell:{
        _, tableview,indexPath,element in
        let cell = tableview.dequeueReusableCell(withIdentifier: "systemCell", for: indexPath) as UITableViewCell
        cell.textLabel?.text = "当前显示的cell" + element
        return cell
    })
    
    /*RxSwift中的subject，subject是observable和Observer之间的桥梁，一个subject既是一个obserable也是一个observe，它既可以发出事件也可以监听事件
     1.publicSubject:订阅publicSubject时，只能接收到订阅他之后发生的事件，subject.onNext()发出onNext事件，对应的还有onError()和onComplete()事件
     2.replaySubject:订阅replaySubject时，可以接收到订阅他之后的事件，但也可以接受订阅他之前发出的事件，接受几个事件取决于bufferSize的大小
     3.BehaviorSubject:订阅behaviorSubject,可以接收到订阅之前的最后一个事件，这个在tableView中用的比较多，一般就是初始化数据显示空值
     */
    ///定义一个BehaviorSubject类型的数据源
    var dataListArr = BehaviorSubject(value: [SectionModel<String,String>]())
    var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let refreshButton = UIBarButtonItem.init(title: "刷新", style: .done, target: self, action: #selector(changeSource))
        let addButton = UIBarButtonItem.init(title: "添加", style: .done, target: self, action: #selector(loadMoreData))

        self.navigationItem.rightBarButtonItems = [refreshButton,addButton]
        
        tableView = UITableView(frame: self.view.bounds, style: .plain)
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "systemCell")
        self.view.addSubview(tableView)
        //绑定数据
        dataListArr.asObserver().bind(to: tableView.rx.items(dataSource: dataSource)).disposed(by: disposedBag)
        //初始化显示数组
        let myOrignal = SectionModel.init(model: "first", items: ["张歆艺","张美琪","张雅芝","李佳琪"])
        dataListArr.onNext([myOrignal])
    }
    
    @objc func changeSource() {
        //初始化显示数组
        let myOrignal = SectionModel.init(model: "first", items: ["郭佳佳","李梅梅","赵德刚","王雅琪"])
        dataListArr.onNext([myOrignal])
    }
    
    @objc func loadMoreData() {
        //取出模型数据
        var tempArr = try! dataListArr.value()
        //模型数据添加新数据
        tempArr[0].items.append(contentsOf: ["郭佳佳","李梅梅","赵德刚","王雅琪"])
        dataListArr.onNext(tempArr)
    }

}
